Syntax10.Scn.Fnt Syntax10i.Scn.Fnt Syntax10b.Scn.Fnt MODULE AmigaDiskFont; (* updated OJ 30 Apr 96 *) IMPORT SYSTEM, E := AmigaExec, G := AmigaGraphics; diskFontBase- : E.LibraryPtr; diskFontVersion- : INTEGER; termEntry : E.TermEntry; CONST diskFontName*="diskfont.library"; maxFontPath * = 256; (* including null terminator *) FontContentsPtr * = UNTRACED POINTER TO FontContents; FontContents * = STRUCT fileName * : ARRAY maxFontPath OF CHAR; ySize * : INTEGER; style * : SHORTSET; flags * : SHORTSET END; TFontContentsPtr * = UNTRACED POINTER TO TFontContents; TFontContents * = STRUCT fileName * : ARRAY maxFontPath-2 OF CHAR; tagCount * : INTEGER; (* * if tfc_TagCount is non-zero, tfc_FileName is overlayed with * Text Tags starting at: (struct TagItem * ) * &tfc_FileName[MAXFONTPATH-(tfc_TagCount*sizeof(struct TagItem))] *) ySize * : INTEGER; style * : SHORTSET; flags * : SHORTSET END; CONST fchId * = 00F00H; (* FontContentsHeader, then FontContents *) tfchId * = 00F02H; (* FontContentsHeader, then TFontContents *) FontContentsHeaderPtr * = UNTRACED POINTER TO FontContentsHeader; FontContentsHeader * = STRUCT fileID * : INTEGER; (* FCH_ID *) numEntries * : INTEGER; (* the number of FontContents elements *) (* fc * : ARRAY numEntries OF FontContents or tfc * : ARRAY numEntries OF TFontContents *) END; CONST dfhId * = 00F80H; maxFontName * = 32; (* font name including ".font\0" *) DiskFontHeaderPtr * = UNTRACED POINTER TO DiskFontHeader; DiskFontHeader * = STRUCT (df * : E.Node) (* node to link disk fonts *) (* the following 8 bytes are not actually considered a part of the *) (* DiskFontHeader, but immediately preceed it. The NextSegment is *) (* supplied by the linker/loader, and the ReturnCode is the code *) (* at the beginning of the font in case someone runs it... *) (* ULONG dfh_NextSegment; \* actually a BPTR *) (* ULONG dfh_ReturnCode; \* MOVEQ #0,D0 : RTS *) (* here then is the official start of the DiskFontHeader... *) fileID * : INTEGER; (* DFH_ID *) revision * : INTEGER; (* the font revision *) segment * : E.BPTR; (* the segment address when loaded *) name * : ARRAY maxFontName OF CHAR; (* the font name (null terminated) *) tf * : G.TextFont; (* loaded TextFont structure *) END; CONST memory * = 0; disk * = 1; scaled * = 2; tagged * = 16; (* return TAvailFont *) AvailFontPtr * = UNTRACED POINTER TO AvailFont; AvailFont * = STRUCT type * : SET; (* MEMORY, DISK, or SCALED *) attr * : G.TextAttr; (* text attributes for font *) END; TAvailFontPtr * = UNTRACED POINTER TO TAvailFont; TAvailFont * = STRUCT type * : SET; (* MEMORY, DISK, or SCALED *) attr * : G.TTextAttr; (* text attributes for font *) END; AvailFontsHeaderPtr * = UNTRACED POINTER TO AvailFontsHeader; AvailFontsHeader * = STRUCT numEntries * : INTEGER; (* number of AvailFont elements *) (* af * : ARRAY numEntries OF AvailFont or taf * : ARRAY numEntries OF TAvailFont *) END; PROCEDURE -ReturnD0 04EH,05EH, 04EH,075H; PROCEDURE OpenDiskFont*(VAR textAttr: G.TextAttr): G.TextFontPtr; BEGIN SYSTEM.PUTREG( 8, SYSTEM.ADR(textAttr) ); SYSTEM.CALL( -30, diskFontBase ); ReturnD0 END OpenDiskFont; PROCEDURE Init; TYPE LibraryPtr=POINTER TO E.Library; VAR lib:LibraryPtr; BEGIN diskFontBase := E.OpenLibrary(diskFontName,37); IF diskFontBase=0 THEN HALT(99) END; lib:=SYSTEM.VAL(LibraryPtr,diskFontBase); diskFontVersion:=lib.version END Init; PROCEDURE Term; BEGIN E.CloseLibrary( diskFontBase ) END Term; BEGIN Init; E.Register(termEntry, Term); END AmigaDiskFont.